﻿$(document).ready(function () {

    (function ($) {
        $.fn.paginate = function (options) {

            var defaults = {
                Total: 0,
                PerPage: 10,
                showNavigation: false,
                currentPage: 'pag-1',
                selected: function () { }
            };

            var options = $.extend(defaults, options);

            if (options.Total > 0) {

                var paginas = Math.round(options.Total / options.PerPage);
                var container = $(this);
                var html = '';
                var pagestoshow = 3;

                if (paginas > pagestoshow) {

                    var numCurrentPage = parseInt(options.currentPage.replace('pag-', ''));

                    var paginasArray = new Array();
                    for (var i = 0; i < paginas; i++) {
                        paginasArray[i] = i + 1;
                    }

                    var posCurrentPage = 0;
                    var prevPage = null;
                    var nextPage = null;
                    var lasPage = paginasArray[paginasArray.length - 1];
                    var fisPage = paginasArray[0];

                    for (var i = 0; i < paginasArray.length; i++) {
                        if (paginasArray[i] == numCurrentPage) {
                            posCurrentPage = [i];
                            if ((paginasArray[i] - 1) != 0) {
                                prevPage = paginasArray[i] - 1;
                            }
                            if ((i + 1) != lasPage) {
                                nextPage = paginasArray[i] + 1;
                            }
                        }
                    }

                    if (prevPage != null) {
                        if (prevPage != fisPage)
                            html += '<li id="pag-' + fisPage + '">' + fisPage + '</li><li>...</li><li id="pag-' + prevPage + '">' + prevPage + '</li>';
                        else
                            html += '<li id="pag-' + prevPage + '">' + prevPage + '</li>';
                    }

                    html += '<li id="pag-' + numCurrentPage + '">' + numCurrentPage + '</li>';

                    if (nextPage != null) {
                        if (nextPage != lasPage)
                            html += '<li id="pag-' + nextPage + '">' + nextPage + '</li><li>...</li><li id="pag-' + lasPage + '">' + lasPage + '</li>';
                        else
                            html += '<li id="pag-' + nextPage + '">' + nextPage + '</li>';
                    }

                }
                else {
                    for (var i = 1; i <= paginas; i++) {
                        html += '<li id="pag-' + i.toString() + '">' + i.toString() + '</li>';
                    }
                }

                html = '<ul class="pages">' + html + '</ul><br>';
                //html = '<ul class="pages">' + html + '</ul> Total de itens encontrados:'+ options.Total +'<br>';
                //html += '  <input type="text" class="pag-item"> Itens por página';
                //html += '  <select class="pag-select"><option>-- Página --</option></select>';

                $(this).html(html);

                setActivePage($(this), options.currentPage);

                $(container).children('.pages').children('li').click(function () {

                    setNavigationToggle(container, $(this).attr('id'));
                    setActivePage(container, $(this).attr('id'));
                    var lastID = parseInt($(this).attr('id').replace('pag-', ''));

                    options.selected({
                        page: $(this).attr('id'),
                        rowID: ((lastID * options.PerPage) - options.PerPage).toString()
                    });
                });

                $(container).children('a').click(function () {
                    var page = getActivePageNumber(container);
                    if ($(this).attr('class') == 'pag-back')
                        page--;
                    else
                        page++;

                    setActivePage(container, 'pag-' + page);
                    setNavigationToggle(container, 'pag-' + page);

                    options.selected({
                        page: 'pag-' + page,
                        rowID: ((page * options.PerPage) - options.PerPage).toString()
                    });
                });
            }

            function setActivePage(container, page) {
                $(container).children('.pages').children('li').attr('class', 'pag');
                $(container).children('.pages').children('#' + page).addClass('active-pag').addClass('ui-state-highlight');
                $(container).children('.pages').children('li').addClass('ui-corner-all').addClass('ui-state-default');
            }

            function getActivePage(container) {
                return $(container).children('.pages').children('.active-pag');
            }

            function setNavigationToggle(container, page) {
                var boolBack = true;
                var boolNext = true;

                if (page == firstPage(container).attr('id'))
                    boolBack = false;

                if (page == lastPage(container).attr('id'))
                    boolNext = false;

                $(container).children('.pag-back').toggle(boolBack);
                $(container).children('.pag-next').toggle(boolNext);
            }

            function firstPage(container) {
                return $(container).children('.pages').children('a').first();
            }

            function lastPage(container) {
                return $(container).children('.pages').children('a').last();
            }

            function getActivePageNumber(container) {
                return parseInt(getActivePage(container).attr('id').replace('pag-', ''))
            }
        };
    })(jQuery);
});

//116 -114 -113 -109 -99 -94